モジュール詳細:うんざりチェス

適当に動かして遊んでいるみたいなもの。良いとこなし。

二つのチェスエンジンが互いに戦い合っている。あなたは駒の移動とゲームの結末を予測しなければいけない。

ここでは「MinitChess」というルールを使用している。これは通常のチェスと以下のような点が異なっている。

  • 盤面と駒数が縮小している(図参照)。
  • ビショップは隣接する のマスにも移動可能である。異なる色のマスに移動してもよい。
  • ポーンの2マス移動や「アンパサン」は禁止されている。キャスリングも禁止されており、プロモーションの際は、ポーンは常にクイーンに変更される。
  • 「チェック」をしなかったり「ステイルメイト」になったままキングを捕まえても勝利する。
  • 同じ盤面が発生することや駒を捕獲した後の移動回数による引き分けは存在しない。
  • 互いが40手動かすと引き分けとなる。

ディスプレーには白のエンジンの文字コードとシード値、黒のエンジンの文字コードとシード値、そのプレイヤーの現在の手数が表示されている。どちらの駒が選択可能か確認し、現在の手番を確認する。FALL/FLATボタンは二つの駒のセットを切り替えることができ、いつでも動かしてもよい。

移動時は駒を選んでから、その行き先を選択する。これをゲームが終了するまで続ける。間違った駒や移動先を選ぶと、ミスが記録される。

エンジン

各エンジンは次の移動を以下のようなステップで決定する。

  • 各エンジンはそれぞれ目標リストを所持している。リストの上部から、有効な移動によって目標を達成するようにする。
  • どのエンジンも最初の目標は相手のキングを捕まえることである。
  • どのエンジンも最後の目標はいずれかの有効な移動を行うである。
  • 各目標に対して目標に到達できる有効な移動がない場合、次の目標に設定する。
  • 目標に到達する移動が一つ以上ある場合、まずそれをa1、a2、...、e6のような座標を使用した「移動前-移動先」の形式で定義し、アルファベット順に並べる。前回の乱数が偶数の場合、更にそれを昇順に並べ、奇数の場合は降順に並べる(例えば乱数が偶数の場合、開始位置における最初の有効な移動はa2-a3であり、最後はe5-e4となる)。
  • 下の乱数生成機を用いて、数字を取得する。
  • 0から開始し、リスト内を求めた乱数と同じ回数だけ移動する。表の端に到達した場合はループする。これが次の手である。
エンジン 目標
D Dark squares are lava
(暗い穴は溶岩)
  • 暗いマスの駒を明るいマスに移動させる。
  • 明るいマスの駒を明るいマスに移動させる。
K The king must die
(王は死すべし)
  • 相手のキングと自分のいずれかの駒の最短距離が短くなるようにする。
L Light squares are lava
(明るい穴は溶岩)
  • 明るいマスの駒を暗いマスに移動させる。
  • 暗いマスの駒を暗いマスに移動させる。
M Mirror、mirror
(鏡よ、鏡)
  • 相手と同じ駒を使用して、相手の最後の一手を盤面中央に対して点対称になるように移動する。
  • 相手と同じ駒を動かす。
S Let’s switch sides
(交換しよう)
  • 相手の初期配置に駒を近づける(ポーンは自分の前方にあるスタート地点のマスのみを参照する)。

距離は上下左右の直線距離で計測する。例:初期配置のクイーン間の距離は7、キング間の距離は9になる。

「鏡よ、鏡」では、対戦相手の直前の移動がポーンからクイーンへのプロモーションであった場合、このエンジンはポーンではなくクイーンを対象として移動しようとする。

乱数生成機

  • 基本値を、シリアルナンバーを取得し各英字は数字に変換することで求める。
  • 新たな乱数を獲得するには、
    • 前回の値から開始する(一回目の場合は、エンジンのシード値を使用する)。
    • 基本値の次の数字を加算する(最後の場合は、最初にループする)。
    • 下一桁を取得する。

  • 白 = L4 (エンジンLを使用。シード値4)
  • 手数 = 1 (初期位置)
  • シリアルナンバー:CH3SS5
  • 基本値:C=3、H=8、3、S=19、S=19、5 → 38319195
  • 4 (シード値) + 3 (基本値の一番目) = 7
  • 最初の目標:相手のキングを捕まえる。この目標を達成する移動方法はない。
  • 次の目標:明るいマスの駒を暗いマスに移動させる。
  • 整理後の考えられる移動方法:0:a2-a3、1:b1-a3、2:b1-c3、3:c2-c3、4:e2-e3
  • 4番目に到達した後は0番目にループするため、7回目の移動では2:b1-c3に到達する。

白の次の乱数生成は、以下のように行われる。

  • 7 (現在の乱数) + 8 (次の基本値) = 15 → 下一桁 = 5.